﻿using Quaack.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Quaack.Web
{
    public partial class WijzigProfiel : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.User.Identity.IsAuthenticated)
            {
                if (!IsPostBack)
                {
                    Profiel profiel = Provider.CurrentUser;
                    txtEmail.Text = profiel.Emailadres;
                    txtMobiel.Text = profiel.Mobiel.Trim();
                    txtProfielschets.Text = profiel.Profielschets;
                }
            }
            else
            {
                Context.Response.StatusCode = 403;
                lblIngelogd.Visible = true;
                panelFormulier.Visible = false;
            }
        }

        /// <summary>
        /// Controleert of het opgegeven wachtwoord gelijk is aan het wachtwoord-veld
        /// </summary>
        /// <param name="source"></param>
        /// <param name="args"></param>
        protected void WachtwoordenGelijk_Validate(object source, ServerValidateEventArgs args)
        {
            args.IsValid = txtWachtwoord.Text == args.Value;
        }

        /// <summary>
        /// Controleert of het opgegeven wachtwoord klopt met het huidige wachtwoord
        /// (enkel indien er een nieuw wachtwoord is ingevuld)
        /// </summary>
        /// <param name="source"></param>
        /// <param name="args"></param>
        protected void HuidigWachtwoord_Validate(object source, ServerValidateEventArgs args)
        {
            if (txtWachtwoord.Text.Length > 0)
            {
                args.IsValid = Membership.Provider.ValidateUser(Provider.CurrentUser.Gebruikersnaam, args.Value);
            }
            else
            {
                args.IsValid = true;
            }
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid || ! Page.User.Identity.IsAuthenticated)
            {
                return;
            }
            Profiel profiel = Provider.CurrentUser;

            // Avatar uploaden indien nodig
            string avatarLocatie = profiel.AvatarLocatie;
            if (FileAvatar.HasFile)
            {
                string extension = FileAvatar.FileName.Substring(FileAvatar.FileName.Length - 4);
                FileAvatar.SaveAs(String.Format(@"{0}\Avatars\{1}.{2}", Request.PhysicalApplicationPath, profiel.Id, extension));
                avatarLocatie = Page.ResolveUrl(String.Format("~/Avatars/{0}.{1}", profiel.Id, extension));
            }

            // Wijzigingen opslaan
            profiel.Wijzig(txtProfielschets.Text, txtEmail.Text, txtMobiel.Text, avatarLocatie);
            // Wachtwoord wijzigen indien nieuw wachtwoord ingevuld
            if (txtWachtwoord.Text.Length > 0)
            {
                Membership.Provider.ChangePassword(profiel.Gebruikersnaam, txtHuidigWachtwoord.Text, txtWachtwoord.Text);
            }

            // Bevestigings-mail sturen naar de gebruiker
            string verificatie = "";
            if (profiel.VerificatieCode != null)
            {
                // Verificatie-url opbouwen, vrij naar http://stackoverflow.com/questions/3681052 -- 29/06/2013
                Uri currentUrl = HttpContext.Current.Request.Url;
                string port = currentUrl.Port == 80 ? "" : ":" + currentUrl.Port;
                string url = string.Format("{0}://{1}{2}{3}?profiel={4}&code={5}", currentUrl.Scheme, currentUrl.Host, port, Page.ResolveUrl("~/Verifieer.aspx"), profiel.Id, profiel.VerificatieCode);
                verificatie = String.Format(
                    @"<p>Het nieuwe e-mailadres moet nog wel geverifieerd worden voordat deze definitief is. Dit gebeurd door op onderstaande link te klikken. <br/>
                      <a href='{0}'>{0}</a></p>", url);

                lblVoltooid.Text += " Het nieuwe e-mailadres moet nog wel geverifieerd worden voordat deze definitief is. Hiervoor is een e-mail gestuurd naar het nieuwe e-mailadres.";
            }
            Provider.SendMail(txtEmail.Text, "Profiel gewijzigd", String.Format(
                @"<p>Beste {0},</p>
                  <p>Je Quaack-profiel is zojuist succesvol gewijzigd.</p>{1}
                      <p>Met vriendelijke groet,</p>
                      <p>Quaack</p>", profiel.Gebruikersnaam, verificatie));

            lblVoltooid.Visible = true;
            panelFormulier.Visible = false;
        }
    }
}